package com.itcodai.controller.course13;

/** 自定义拦截器
 * @author c-fanqj
 * @date 2023/4/11
 * @apiNote
 */
/*public class MyInterceptor implements HandlerInterceptor {

    private final Logger logger =
            LoggerFactory.getLogger(this.getClass());

    // 当某个 url 已经匹配到对应的 Controller 中的某个方法，且在这个方法执行之前
    // 决定是否将请求放行，这是通过返回值来决定的，返回 true 则放行，返回 false 则不会向后执行
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        //return HandlerInterceptor.super.preHandle(request, response, handler);
        //if () {
        //}
        //HandlerMethod   ResourceHttpRequestHandler
        HandlerMethod handlerMethod;
        try {
            handlerMethod = (HandlerMethod) handler;
        } catch (Exception e) {
            //e.printStackTrace();
            return true;
        }
        //HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        String methodName = method.getName();
        logger.info("====拦截到了方法：{}，在该方法执行之前执行====", methodName);

        // 通过方法，可以获取该方法上的自定义注解，然后通过注解来判断该方法是否要被拦截
        // @UnInterception 是我们自定义的注解
        UnInterception unInterception = method.getAnnotation(UnInterception.class);
        if (null != unInterception) {
            return true;
        }

        // 判断用户有没有登陆，一般登陆之后的用户都有一个对应的token
        *//*String token = request.getParameter("token");
        if (null == token || "".equals(token)) {
            logger.info("用户未登录，没有权限执行，请登录");
            return false;
        }*//*

        // 返回true才会继续执行，返回false则取消当前请求
        return true;
    }

    // 当某个 url 已经匹配到对应的 Controller 中的某个方法，且在执行完了该方法
    // 但是在 DispatcherServlet 视图渲染之前  ModelAndView
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        //HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        logger.info("执行完方法之后进执行(Controller方法调用之后)，但是此时还没进行视图渲染");
    }

    // 在整个请求处理完成后（包括视图渲染）执行,
    // 只有在 preHandle(……) 被成功执行后并且返回 true才会被执行
    // 做一些资源的清理工作
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        //HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        logger.info("整个请求都处理完咯，DispatcherServlet也渲染了对应的视图咯，此时我可以做一些清理的工作了");
    }
}*/
